#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int R,C;
//visited[i][j]=1表示该位置可以访问，否则表示不可以访问
int visited[45][45];
struct Dir{
    int x,y;
};
Dir dir[4]={{1,0},{-1,0},{0,1},{0,-1}};
struct Node{
    int x,y;
    int length;
};
queue<Node> q;
int bfs(){
    while(!q.empty()){
        Node node=q.front();q.pop();
        if(node.x==R&&node.y==C){
            return node.length;
        }
        int nX,nY;
        for(int i=0;i<4;i++){
            nX=node.x+dir[i].x;
            nY=node.y+dir[i].y;
            if(visited[nX][nY]){
                Node temp;
                temp.x=nX;temp.y=nY;temp.length=node.length+1;
                q.push(temp);
                visited[nX][nY]=0;            
            }
        }
    }
 
}
int main(){
    //3752:走迷宫
    cin>>R>>C;
    //初始化为都不可以访问
    memset(visited,0,sizeof(visited));
    for(int i=1;i<=R;i++)
    for(int j=1;j<=C;j++){
        char ch;
        cin>>ch;
        if(ch=='.'){
            visited[i][j]=1;
        }        
    }
    Node node;
    node.x=1;node.y=1;node.length=1;
    q.push(node);
    int res=bfs();
    cout<<res;
    return 0;
}